package com.gles.framework;

import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;

import android.opengl.GLSurfaceView.Renderer;
import android.view.View;
import device.graphics.GraphicsDevice;
import device.input.InputDevice;
import device.input.TouchEvent;



public class ApplicationRunner implements Renderer
{
	/** タッチイベント */
	private InputDevice		m_inputDevice;

	/** グラフィックスデバイス */
	private GraphicsDevice	m_graphicsDevice;

	/** アプリケーションクラス */
	private GameMain		m_gameMain;

	/**
	 * コンストラクタ
	 *
	 * @param view viewインスタンス
	 */
	public ApplicationRunner( View view, ActivityMediator mediator )
	{

		TouchEvent touchEvent = new TouchEvent();

		m_inputDevice = new InputDevice( touchEvent );

		m_gameMain = new GameMain( mediator );

		// タッチイベントの登録
		view.setOnTouchListener( touchEvent );
	}

	/**
	 * 画面生成時のコールバック
	 *
	 * @param gl 		openGLESモジュール
	 * @param config	config
	 */
	@Override
	public void onSurfaceCreated( GL10 gl, EGLConfig config )
	{
		m_graphicsDevice = new GraphicsDevice();

		// アプリケーションの初期化
		m_gameMain.initialize();
	}

	/**
	 * 定期的に呼ばれるコールバック
	 *
	 * @param gl	openGLESモジュール
	 */
	@Override
	public void onDrawFrame(GL10 gl)
	{
		// タッチイベント更新
		m_inputDevice.update();

		m_gameMain.gameTask( m_inputDevice, m_graphicsDevice );


	}

	/**
	 * 縦横のサイズ変更時に呼ばれるコールバック
	 *
	 * @param gl 		openGLESモジュール
	 * @param width 	画面の横サイズ
	 * @param height	画面の縦サイズ
	 */
	@Override
	public void onSurfaceChanged(GL10 gl, int width, int height)
	{
		m_graphicsDevice.setViewPort( gl, width, height );
//		m_graphicsDevice.setOrth2D( width, height );

	}
}